package com.sinopec.ch34x.device.core.instruct

/**
 * lwj at 2023/5/18
 * 一个指令
 */
data class Instruct(
    val bytes: ByteArray
) {

    companion object {
        private fun ByteArray.instruct() = Instruct(this)
    }

    /**
     * 黄灯
     */
    object Yellow {
        val Open = byteArrayOf(
            (0xA0).toByte(),
            (0x01).toByte(),
            (0x01).toByte(),
            (0xA2).toByte(),
        ).instruct()
        val Close = byteArrayOf(
            (0xA0).toByte(),
            (0x01).toByte(),
            (0x00).toByte(),
            (0xA1).toByte(),
        ).instruct()
        val Flicker = byteArrayOf(
            (0xA0).toByte(),
            (0x01).toByte(),
            (0x02).toByte(),
            (0xA3).toByte(),
        ).instruct()
    }

    /**
     * 黄灯+蜂鸣控制
     */
    object YellowRing {
        val Open = byteArrayOf(
            (0xA0).toByte(),
            (0x05).toByte(),
            (0x01).toByte(),
            (0xA6).toByte(),
        ).instruct()
        val Close = byteArrayOf(
            (0xA0).toByte(),
            (0x05).toByte(),
            (0x00).toByte(),
            (0xA5).toByte(),
        ).instruct()
        val Flicker = byteArrayOf(
            (0xA0).toByte(),
            (0x05).toByte(),
            (0x02).toByte(),
            (0xA7).toByte(),
        ).instruct()
    }


    //红灯
    object Red {
        val Open = byteArrayOf(
            (0xA0).toByte(),
            (0x03).toByte(),
            (0x01).toByte(),
            (0xA4).toByte(),
        ).instruct()
        val Close = byteArrayOf(
            (0xA0).toByte(),
            (0x03).toByte(),
            (0x00).toByte(),
            (0xA3).toByte(),
        ).instruct()
        val Flicker = byteArrayOf(
            (0xA0).toByte(),
            (0x03).toByte(),
            (0x02).toByte(),
            (0xA5).toByte(),
        ).instruct()
    }

    object RedRing {
        val Open = byteArrayOf(
            (0xA0).toByte(),
            (0x07).toByte(),
            (0x01).toByte(),
            (0xA8).toByte(),
        ).instruct()
        val Close = byteArrayOf(
            (0xA0).toByte(),
            (0x07).toByte(),
            (0x00).toByte(),
            (0xA7).toByte(),
        ).instruct()
        val Flicker = byteArrayOf(
            (0xA0).toByte(),
            (0x07).toByte(),
            (0x02).toByte(),
            (0xA9).toByte(),
        ).instruct()
    }

    //绿灯
    object Green {
        val Open = byteArrayOf(
            (0xA0).toByte(),
            (0x02).toByte(),
            (0x01).toByte(),
            (0xA3).toByte(),
        ).instruct()
        val Close = byteArrayOf(
            (0xA0).toByte(),
            (0x02).toByte(),
            (0x00).toByte(),
            (0xA2).toByte(),
        ).instruct()
        val Flicker = byteArrayOf(
            (0xA0).toByte(),
            (0x02).toByte(),
            (0x02).toByte(),
            (0xA4).toByte(),
        ).instruct()
    }

    object GreenRing {
        val Open = byteArrayOf(
            (0xA0).toByte(),
            (0x06).toByte(),
            (0x01).toByte(),
            (0xA7).toByte(),
        ).instruct()
        val Close = byteArrayOf(
            (0xA0).toByte(),
            (0x06).toByte(),
            (0x00).toByte(),
            (0xA6).toByte(),
        ).instruct()
        val Flicker = byteArrayOf(
            (0xA0).toByte(),
            (0x06).toByte(),
            (0x02).toByte(),
            (0xA8).toByte(),
        ).instruct()
    }

    //蜂鸣控制
    object Ring {
        val Long = byteArrayOf(
            (0xA0).toByte(),
            (0x04).toByte(),
            (0x01).toByte(),
            (0xA5).toByte(),
        ).instruct()
        val Close = byteArrayOf(
            (0xA0).toByte(),
            (0x04).toByte(),
            (0x00).toByte(),
            (0xA4).toByte(),
        ).instruct()
        val Intermission = byteArrayOf(
            (0xA0).toByte(),
            (0x04).toByte(),
            (0x02).toByte(),
            (0xA6).toByte(),
        ).instruct()
    }

    //全局
    object Global {
        val Open = byteArrayOf(
            (0xA0).toByte(),
            (0x00).toByte(),
            (0x01).toByte(),
            (0xA1).toByte(),
        ).instruct()
        val Close = byteArrayOf(
            (0xA0).toByte(),
            (0x00).toByte(),
            (0x00).toByte(),
            (0xA0).toByte(),
        ).instruct()
        val Flicker = byteArrayOf(
            (0xA0).toByte(),
            (0x00).toByte(),
            (0x02).toByte(),
            (0xA2).toByte(),
        ).instruct()
    }


}
